Buttons and Edits
Volume Number: 1
Issue Number: 5
Column Tag: BASIC SCHOOL
Buttons and Edit fields
By Dave Kelly
Well, now that we know how to use windows, we should discuss what to put in
them. Besides the usual printing of output, our Macintosh provides us with what are
known as BUTTONs and EDIT FIELDs.
In MS Basic 2.0 the syntax is:
BUTTON button-id,state [ ,title,
rectangle [,type ]]
BUTTON CLOSE n
EDIT FIELD field-id [,default, rectangle [,[type][,justify ]]]
EDIT FIELD CLOSE field-id
The id parameter identifies the button or edit field number. BUTTON states are:
0=Button inactive,dimmed on the screen,1=Button active, not selected, 2 =Button
active, selected. Title is a string expression that is displayed inside or beside the
identified BUTTON. The BUTTON type paramenter identifies the type of BUTTON, 1=A
simple push button, 2=A check box, 3=A radio button. The EDIT FIELD default is the
string expression to be edited. Cut and paste editing can be used to edit the default
string. Type indicates one of four editing formats. Types are: 1=Draw a box around
the rectangle to be edited-Return keys not allowed, 2=Draw a box around the rectangle
and allow return keys, 3=No box around edit field-Return keys not allowed, 4=No box
around the rectangle and allow return keys. When using types 1 and 3 the edit field has
wrap around (no return keys are allowed). The justify parameter specifies the
justification of the text in the EDIT FIELD, 1=Left Justify, 2=Center Justify, 3=Right
Justify. Now we’re ready to program.
Well, almost. If you remember from our discussion of WINDOWs, the rectangle
parameter specifies the location of the window on the Macintosh screen. The rectangle
parameter in BUTTON and EDIT FIELD statements specifies the location of the BUTTON
or EDIT FIELD in the current output window. It has the form (x1,y1)-(x2,y2), same
as for WINDOW, (x1,y1) is the upper left corner of the current window and (x2,y2)
is the lower right corner of the window. Sounds easy at first, but here’s the catch: for
every program you write you have to figure out where on the screen you want to put
each BUTTON or EDIT FIELD. This can be quite a pain, e specially if you have alot to put
in your window. Since there is no one rectangle for every application, you must be the
judge of what you think “looks” good. This is true for all program development on the
Mac. All of positions for the dialog boxes and window that we see in the finder and in
other applications had to be decided the same way.
The program, Rectangle Sizer should be an aid to anyone experimenting with the
positions and sizes of BUTTONs and EDIT FIELDs. When the program starts you may
select BUTTONS or EDIT FIELDS from the Type Selection menu. The function menu
allows you to add additional BUTTONs or EDIT FIELDS or erase. You may change the size
of the output window and move it around, then select Window dimensions from the
function menu and the program will print the current width and height of the output
window. As you place BUTTONs or EDIT FIELDs in the window, the program will
display the current rectangle cooredinates. You may want to experiment and write
down the coordinates for use in your program. If you want to use different fonts and
sizes you can add a menu for that if you wish. This would be useful in programming the
EDIT FIELDs. The BUTTONs always use 12 point Chicago. Therefore the rectangle size
must be 12 point or more or part of the text will be clipped off. To use other fonts with
BUTTONs you should print text beside the BUTTON. (You may have to move the desired
fonts to your BASIC disk as only the bare minimum of fonts comes on the disk). It
would take some experimenting to get things just right, however. You should
experiment with the different BUTTON types and sizes to see what happens. A useful
utility brought to you by MACTUTOR.
‘ Rectangle Sizer
‘ By Dave Kelly
‘ ©MACTUTOR 1985
‘Set up menus
MENU 6,0,1,”Function”
MENU 6,1,0,”Add or Change Button #”
MENU 6,2,1,”Erase Button”
MENU 6,3,0,”-”
MENU 6,4,0,”Add or Change Edit Field #”
MENU 6,5,1,”Erase Edit Field”
MENU 6,6,0,”-”
MENU 6,7,1,”Window dimensions”
MENU 6,8,1,”Quit”
MENU 7,0,1,”Type Selection”
MENU 7,1,1,”Buttons”
MENU 7,2,1,”Edit Fields”
MENU 7,3,2,”No Selection”
rect%=0:bnumber%=0:enumber%=0
ON MENU GOSUB menuevent : MENU ON
WINDOW CLOSE 1
WINDOW 2,,(2,280)-(510,340),3: CLS
WINDOW 1,”Rectangle Sizer Window”, (2,40)-(510,275)
ON MOUSE GOSUB mouse event
‘Watch for mouse click
MOUSE ON
pause:GOTO pause
mouse event:
MOUSE OFF: MENU OFF: x=MOUSE(0) xstart=MOUSE(3): ystart=MOUSE(4)
loop:
x=MOUSE(0)
IF x>=0 THEN exitloop’ Loop until button is released
xend=MOUSE(5):yend=MOUSE(6)
IF rect%=1 AND bnumber%>0 THEN BUTTON bnumber%,State,Title$,
(xstart,ystart)-(xend,yend),Type
IF rect%=2 AND (yend-ystart<=0) THEN yend=ystart+1
IF rect%=2 AND (xend-xstart<15) THEN xend=xstart+16
IF rect%=2 AND enumber%>0 THEN
EDIT FIELD enumber%,default$, (xstart,ystart)-(xend,yend),
EditType,Justify
CLS:WINDOW OUTPUT 2:LOCATE 1,1
IF rect%=1 THEN
PRINT”Rectangle”;bnumber%; ELSE
PRINT “Rectangle”;enumber%;
PRINT “is: (“;xstart;”,”;ystart;”)-(“;xend;
“,”;yend;”)”:WINDOW 1
GOTO loop
exitloop:
WINDOW OUTPUT 2
LOCATE 1,1:IF rect%=1 THEN PRINT”Rectangle”;bnumber%; ELSE
PRINT “Rectangle”;enumber%;
PRINT “is: (“;xstart;”,”;ystart;”)-(“;xend;
“,”;yend;”)”: WINDOW OUTPUT 1
MOUSE ON: MENU ON: RETURN
menu event:
menunumber=MENU(0)
IF menunumber=7 THEN menu7
IF menunumber<>6 THEN RETURN
menuitem=MENU(1): MENU
ON menuitem GOSUB Change button, Erase button, blank, Changeedit,
Eraseedit, blank, Windowsize, Quit
RETURN
blank:RETURN ‘This will never happen, but just in case...
menu7: menuitem=MENU(1)
IF menuitem=1 THEN MENU 7,3,1:MENU 7,1,2: MENU 7,2,1: MENU
6,1,1: MENU 6,4,0: rect%=1:IF bnumber%=0 THEN GOSUB
change button
IF menuitem=2 THEN MENU 7,3,1:MENU 7,1,1: MENU 7,2,2: MENU
6,1,0: MENU 6,4,1: rect%=2:IF enumber%=0 THEN GOSUB changeedit
IF menuitem=3 THEN MENU 7,3,2:MENU 7,1,1: MENU 7,2,1: MENU
6,1,0: MENU 6,4,0: rect%=0
RETURN
Change button:
WINDOW 2: CLS:INPUT “Enter Button number:”,bnumber%
IF bnumber% <=0 GOTO Change button
GOSUB Start button: WINDOW 1: RETURN
Erase button:WINDOW 2:CLS
INPUT”Erase which number”;E%
CLS:WINDOW 1: BUTTON CLOSE E%
RETURN
Changeedit:
WINDOW 2: CLS
INPUT”Enter Edit Field number:”, enumber%
IF enumber%<=0 GOTO Changeedit
GOSUB Startedit: WINDOW 1: RETURN
Eraseedit:
WINDOW 2: CLS
INPUT”Erase which Edit Field number”;E%: CLS: WINDOW 1
EDIT FIELD CLOSE e%: RETURN
Quit: WINDOW CLOSE 2:MENU RESET:END
Start button:
CLS:PRINT “Enter Button #”;bnumber%;
INPUT” Title:”,Title$
In2:INPUT “Enter Type (1=Push button, 2=Check box, 3= Radio
button):”, Type
IF Type < 1 OR Type >3 GOTO In2
In3:INPUT “Enter State (0=Inactive, 1=Active/not selected,
2=Active/selected):”,State
IF State <0 OR State >2 GOTO In3
CLS:RETURN
Startedit:
CLS:PRINT “Enter Edit Field #”;enumber%;
INPUT” Default (CR=None) :”,default$
e2:INPUT “Enter Type (1=Draw box/no CR, 2=Draw box/CR,
3=No Box/no CR, 4=No Box/CR):”,EditType
IF EditType < 1 OR EditType >4 GOTO e2
e3:INPUT “Enter Justify mode (1=Left Justify, 2=Center text,
3=Right Justify):”,Justify
IF Justify <1 OR Justify >3 GOTO e3
CLS:RETURN
windowsize:
WINDOW OUTPUT 1:winwidth= WINDOW(2)
winheight=WINDOW(3)
WINDOW OUTPUT 2: LOCATE 2,1:PRINT “Window width=”;winwidth;”
height=”; winheight;
WINDOW OUTPUT 1:RETURN